#include <iostream>
#include <unistd.h>
#include <string>
#include <sys/types.h>
#include <signal.h>
#include <cstdio>
#include <cstdlib>

// static void Usage(const std::string &proc)
// {
//     std::cout << "\nUsage: " << proc << "  pid signo\n"
//               << std::endl;
// }

// int cnt = 0;

void catchSig(int signo)
{
    std::cout << "获取一个信号，信号编号是: " << signo << std::endl;
}

int main(int argc, char *argv[])
{

    for (int signo = 1; signo <= 31; signo++)
    {
        signal(signo, catchSig);
    }
    while (true)
    {
        std::cout << "我正在运行: " << getpid() << std::endl;
        sleep(1);
    }
    // 核心转储
    // while (true)
    // {
    //     int a[10];
    //     // a[100] = 20;
    //     // 数组越界不一定程序崩溃，有时候，越界访问的内存地址恰好是程序可以合法访问的其他内存区域，或者该内存区域暂时没有被使用
    //     a[10000] = 20;
    // }

    // signal(SIGALRM, catchSig);
    // alarm(1);
    // while (true)
    // {
    //     cnt++;
    // }
    // signal(SIGFPE, catchSig);
    // int a = 10;
    // a /= 0;
    // signal(SIGSEGV,catchSig);
    // while(true)
    // {
    //     std::cout << "我在运行中..." << std::endl;
    //     sleep(1);
    //     int* p = nullptr;
    //     *p = 100;
    // }

    // int cnt = 0;
    // while (cnt <= 10)
    // {
    //     printf("cnt: %d,pid: %d\n", cnt++, getpid());
    //     sleep(1);
    // if(cnt >= 5)
    // {
    //     abort();
    //     //raise(3);
    //     //kill(getpid(),3);
    // }
    // sleep(1);

    // if (argc != 3)
    // {
    //     Usage(argv[0]);
    //     exit(1);
    // }
    // pid_t pid = atoi(argv[1]);
    // int signo = atoi(argv[2]);
    // int n = kill(pid, signo);
    // if (n != 0)
    // {
    //     perror("kill");
    // }

    // while (true)
    // {
    //     std::cout << "我是一个进程：" << getpid() << std::endl;
    //     sleep(1);
    // }
    // return 0;
}
